#Boa:Dialog:ABMProductos

import wx
import wx.grid
import consultasBD
import utiles
from decimal import Decimal
import sincronizar_tabla

def create(parent):
    return ABMProductos(parent)

[wxID_ABMPRODUCTOS, wxID_ABMPRODUCTOSBUTTON1, wxID_ABMPRODUCTOSBUTTON2, 
 wxID_ABMPRODUCTOSBUTTON3, wxID_ABMPRODUCTOSBUTTON4, wxID_ABMPRODUCTOSBUTTON5, 
 wxID_ABMPRODUCTOSCOMBOBOX1, wxID_ABMPRODUCTOSCOMBOBOX2, 
 wxID_ABMPRODUCTOSCOMBOBOX3, wxID_ABMPRODUCTOSCOMBOBOX4, 
 wxID_ABMPRODUCTOSSTATICTEXT1, wxID_ABMPRODUCTOSSTATICTEXT10, 
 wxID_ABMPRODUCTOSSTATICTEXT11, wxID_ABMPRODUCTOSSTATICTEXT12, 
 wxID_ABMPRODUCTOSSTATICTEXT2, wxID_ABMPRODUCTOSSTATICTEXT3, 
 wxID_ABMPRODUCTOSSTATICTEXT4, wxID_ABMPRODUCTOSSTATICTEXT5, 
 wxID_ABMPRODUCTOSSTATICTEXT6, wxID_ABMPRODUCTOSSTATICTEXT7, 
 wxID_ABMPRODUCTOSSTATICTEXT8, wxID_ABMPRODUCTOSSTATICTEXT9, 
 wxID_ABMPRODUCTOSTEXTCTRL1, wxID_ABMPRODUCTOSTEXTCTRL2, 
 wxID_ABMPRODUCTOSTEXTCTRL3, wxID_ABMPRODUCTOSTEXTCTRL4, 
 wxID_ABMPRODUCTOSTEXTCTRL5, wxID_ABMPRODUCTOSTEXTCTRL6, 
 wxID_ABMPRODUCTOSTEXTCTRL7, wxID_ABMPRODUCTOSTEXTCTRL8, 
 wxID_ABMPRODUCTOSTEXTCTRL9, 
] = [wx.NewId() for _init_ctrls in range(31)]

class ABMProductos(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_ABMPRODUCTOS, name='ABMProductos',
              parent=prnt, pos=wx.Point(287, 145), size=wx.Size(476, 337),
              style=wx.DEFAULT_DIALOG_STYLE, title='Alta Productos')
        self.SetClientSize(wx.Size(468, 310))

        self.staticText1 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT1,
              label='Proveedor', name='staticText1', parent=self,
              pos=wx.Point(16, 8), size=wx.Size(50, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL1,
              name='textCtrl1', parent=self, pos=wx.Point(16, 24),
              size=wx.Size(64, 21), style=0, value='')

        self.textCtrl2 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL2,
              name='textCtrl2', parent=self, pos=wx.Point(80, 24),
              size=wx.Size(152, 21), style=0, value='')

        self.button1 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON1, label='Proveedor',
              name='button1', parent=self, pos=wx.Point(288, 24),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscarProveedor,
              id=wxID_ABMPRODUCTOSBUTTON1)

        self.staticText2 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT2,
              label='Parametro', name='staticText2', parent=self,
              pos=wx.Point(232, 8), size=wx.Size(50, 13), style=0)

        self.textCtrl3 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL3,
              name='textCtrl3', parent=self, pos=wx.Point(232, 24),
              size=wx.Size(48, 21), style=0, value='')
        self.textCtrl3.SetEditable(False)

        self.staticText3 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT3,
              label='Cod.Art.Proveedor', name='staticText3', parent=self,
              pos=wx.Point(16, 56), size=wx.Size(92, 13), style=0)

        self.textCtrl4 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL4,
              name='textCtrl4', parent=self, pos=wx.Point(16, 72),
              size=wx.Size(88, 21), style=0, value='')
        self.textCtrl4.Enable(False)

        self.comboBox4 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX4,
              name='comboBox4', parent=self, pos=wx.Point(120, 72),
              size=wx.Size(120, 21), style=0, value='')
        self.comboBox4.SetLabel('')
        self.comboBox4.Enable(False)

        self.button2 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON2, label='Alta',
              name='button2', parent=self, pos=wx.Point(288, 72),
              size=wx.Size(75, 23), style=0)
        self.button2.Enable(False)
        self.button2.Bind(wx.EVT_BUTTON, self.OnAlta,
              id=wxID_ABMPRODUCTOSBUTTON2)

        self.staticText4 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT4,
              label='Codigo Art.Sussan', name='staticText4', parent=self,
              pos=wx.Point(16, 112), size=wx.Size(89, 13), style=0)

        self.textCtrl5 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL5,
              name='textCtrl5', parent=self, pos=wx.Point(16, 128),
              size=wx.Size(88, 21), style=0, value='')
        self.textCtrl5.Enable(False)
        self.textCtrl5.SetEditable(False)

        self.staticText5 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT5,
              label='Estacion', name='staticText5', parent=self,
              pos=wx.Point(120, 112), size=wx.Size(40, 13), style=0)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(120, 128),
              size=wx.Size(100, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Enable(False)

        self.staticText6 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT6,
              label='Anio', name='staticText6', parent=self, pos=wx.Point(224,
              112), size=wx.Size(21, 13), style=0)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX2,
              name='comboBox2', parent=self, pos=wx.Point(224, 128),
              size=wx.Size(66, 21), style=0, value='')
        self.comboBox2.SetLabel('')
        self.comboBox2.Enable(False)

        self.staticText7 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT7,
              label='Descripcion', name='staticText7', parent=self,
              pos=wx.Point(16, 152), size=wx.Size(54, 13), style=0)

        self.textCtrl6 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL6,
              name='textCtrl6', parent=self, pos=wx.Point(16, 168),
              size=wx.Size(344, 21), style=0, value='')
        self.textCtrl6.Enable(False)
        self.textCtrl6.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)

        self.staticText8 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT8,
              label='Grupo', name='staticText8', parent=self, pos=wx.Point(16,
              192), size=wx.Size(29, 13), style=0)

        self.comboBox3 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX3,
              name='comboBox3', parent=self, pos=wx.Point(16, 208),
              size=wx.Size(192, 21), style=0, value='')
        self.comboBox3.SetLabel('')
        self.comboBox3.Enable(False)

        self.staticText9 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT9,
              label='Precio Costo\nProveedor', name='staticText9', parent=self,
              pos=wx.Point(216, 208), size=wx.Size(60, 26), style=0)

        self.textCtrl7 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL7,
              name='textCtrl7', parent=self, pos=wx.Point(288, 208),
              size=wx.Size(72, 21), style=wx.TE_RIGHT | wx.TE_LEFT,
              value='0.00')
        self.textCtrl7.Enable(False)
        self.textCtrl7.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocusCosto)

        self.staticText10 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT10,
              label='Precio calculo\nprecio venta', name='staticText10',
              parent=self, pos=wx.Point(216, 240), size=wx.Size(64, 26),
              style=0)

        self.textCtrl8 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL8,
              name='textCtrl8', parent=self, pos=wx.Point(288, 240),
              size=wx.Size(72, 21), style=wx.TE_RIGHT | wx.TE_LEFT,
              value='0.00')
        self.textCtrl8.Enable(False)
        self.textCtrl8.Bind(wx.EVT_KILL_FOCUS, self.OnCalculaPrecioVenta)

        self.staticText11 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT11,
              label='Precio Venta', name='staticText11', parent=self,
              pos=wx.Point(216, 272), size=wx.Size(60, 13), style=0)

        self.textCtrl9 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL9,
              name='textCtrl9', parent=self, pos=wx.Point(288, 272),
              size=wx.Size(72, 21), style=wx.TE_RIGHT | wx.TE_LEFT,
              value='0.00')
        self.textCtrl9.Enable(False)

        self.button3 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON3, label='Guardar',
              name='button3', parent=self, pos=wx.Point(376, 208),
              size=wx.Size(75, 23), style=0)
        self.button3.Enable(False)
        self.button3.Bind(wx.EVT_BUTTON, self.OnGuardar,
              id=wxID_ABMPRODUCTOSBUTTON3)

        self.button5 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON5, label='Limpiar',
              name='button5', parent=self, pos=wx.Point(376, 240),
              size=wx.Size(75, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnLimpiar,
              id=wxID_ABMPRODUCTOSBUTTON5)

        self.button4 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON4, label='Salir',
              name='button4', parent=self, pos=wx.Point(376, 272),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnSalir,
              id=wxID_ABMPRODUCTOSBUTTON4)

        self.staticText12 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT12,
              label='Temporada', name='staticText12', parent=self,
              pos=wx.Point(120, 56), size=wx.Size(54, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.llenarComboTemporada()
        self.cargaAnioCombo()
        self.cargarEstacion()
        self.cargarGrupos()

    def habilita1(self,habilita=True):
        self.textCtrl1.SetEditable(not habilita)
        self.textCtrl2.SetEditable(not habilita)
        self.button1.Enable(not habilita)

        self.textCtrl4.Enable(habilita)
        self.textCtrl4.SetEditable(habilita)
        self.comboBox4.Enable(habilita)
        self.button2.Enable(habilita)

    def habilita2(self,habilita=True):
        self.textCtrl4.Enable(not habilita)
        self.textCtrl4.SetEditable(not habilita)
        self.comboBox4.Enable(not habilita)
        self.button2.Enable(not habilita)
    
        self.textCtrl5.Enable(habilita)
        self.textCtrl5.SetEditable(not habilita)
        self.textCtrl6.Enable(habilita)
        self.textCtrl7.Enable(habilita)
        self.textCtrl8.Enable(habilita)

        self.comboBox1.Enable(habilita)
        self.comboBox2.Enable(habilita)
        self.comboBox3.Enable(habilita)
        self.button3.Enable(habilita)
        self.comboBox1.SetFocus()

    def OnBuscarProveedor(self, event):
        if self.textCtrl1.GetValue() != "":
            consultaSQL = "SELECT idproveedor,nombre,parametro FROM proveedor WHERE idproveedor = '"+self.textCtrl1.GetValue()+"' "
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != ():
                proveedor = resultado[0]
                self.textCtrl1.SetLabel(proveedor["idproveedor"])
                self.textCtrl2.SetLabel(proveedor["nombre"])
                self.textCtrl3.SetLabel(proveedor["parametro"])
                self.habilita1()
                self.textCtrl4.SetFocus()
                return
            self.textCtrl1.SetLabel("")
            self.textCtrl2.SetLabel("")
            self.textCtrl1.SetFocus()
            return
        if self.textCtrl2.GetValue() != "":
            consultaSQL = "SELECT idproveedor,nombre,parametro FROM proveedor WHERE nombre LIKE '%"+self.textCtrl2.GetValue()+"%' "
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != () and len(resultado)==1:
                proveedor = resultado[0]
                self.textCtrl1.SetLabel(proveedor["idproveedor"])
                self.textCtrl2.SetLabel(proveedor["nombre"])
                self.textCtrl3.SetLabel(proveedor["parametro"])
                self.habilita1()
                self.textCtrl4.SetFocus()
                return
        import BuscaProveedor2
        ventana = BuscaProveedor2.Dialog1(self,self.textCtrl2.GetLabel())
        try:
            ventana.ShowModal()
            eleccion = ventana.getSeleccion()
        finally:
            ventana.Destroy()
        if eleccion.split(" / ") != ['']:
            self.textCtrl1.SetValue(eleccion.split(" / ")[1])
            self.textCtrl2.SetValue(eleccion.split(" / ")[0])
            consultaSQL = "SELECT parametro FROM proveedor WHERE nombre LIKE '%"+eleccion.split(" / ")[0]+"%' "
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != () and len(resultado)==1:
                self.textCtrl3.SetLabel(resultado[0]["parametro"])
            self.habilita1()
            self.textCtrl4.SetFocus()
        else:
            self.textCtrl4.SetFocus()

    def OnLimpiar(self, event):
        self.textCtrl1.SetLabel("")
        self.textCtrl2.SetLabel("")
        self.textCtrl3.SetLabel("")
        self.textCtrl4.SetLabel("")
        self.textCtrl5.SetLabel("")
        self.textCtrl6.SetLabel("")
        self.textCtrl7.SetLabel("0.00")
        self.textCtrl8.SetLabel("0.00")
        self.textCtrl9.SetLabel("0.00")
        self.comboBox1.SetSelection(-1)
        self.comboBox2.SetSelection(-1)
        self.comboBox3.SetSelection(-1)
        self.comboBox4.SetSelection(-1)
        self.habilita2(False)
        self.habilita1(False)
        self.textCtrl1.SetFocus()

    def llenarComboTemporada(self):
        anio = int(utiles.obtenerFecha("Y-m-d")[:4])
        mes = int(utiles.obtenerFecha("Y-m-d")[5:7])
        dia = int(utiles.obtenerFecha("Y-m-d")[-2:])
        anioanterior = anio -1
        anioactual = anio
        aniosiguiente = anio + 1
        self.comboBox4.Append("INVIERNO"+str(anioanterior))
        self.comboBox4.Append("VERANO"+str(anioanterior))
        self.comboBox4.Append("INVIERNO"+str(anioactual))
        self.comboBox4.Append("VERANO"+str(anioactual))
        self.comboBox4.Append("INVIERNO"+str(aniosiguiente))
        self.comboBox4.Append("VERANO"+str(aniosiguiente))
        self.comboBox4.SetEditable(False)
        #Este codigo de IF permite setear automaticamente la temporada
        if mes < 8: #invierno
            self.comboBox1.SetSelection(2)
        else: #verano
            self.comboBox1.SetSelection(3)

    def cargarGrupos(self):
        list = []
        condicionSQL = "1 ORDER BY nombregrupo"
        resultados = consultasBD.executaSQL(self,"*","grupos",condicionSQL)
        for r in resultados:
            list.append(str(r[1])+" / "+str(r[0]))
        self.comboBox3.SetItems(list)
        return #list

    def cargaAnioCombo(self):
        anioActual = utiles.getfecha()[-4:]
        anioAnterior = str(int(anioActual)-1)
        anioSiguiente= str(int(anioActual)+1)
        self.comboBox2.Append(anioAnterior)
        self.comboBox2.Append(anioActual)
        self.comboBox2.Append(anioSiguiente)

    def cargarEstacion(self):
        self.comboBox1.Append("Invierno")
        self.comboBox1.Append("Verano")
        self.comboBox1.Append("Primavera")
        self.comboBox1.Append("Otono")

    def OnSalir(self, event):
        self.Close()

    def verificarDatos(self):
        if self.textCtrl4.GetLabel()=="":
            utiles.mensaje(None,"Debe introducir un codigo de articulo del proveedor")
            self.textCtrl4.SetFocus()
            return False
        if self.comboBox4.GetSelection()<0:
            utiles.mensaje(None,"Seleccione la temporada")
            self.comboBox4.SetFocus()
            return False
        codartprov = self.textCtrl4.GetLabel()
        r1 = "SELECT p.codsussan "
        r2 = "FROM producto_codartprov pc, "
        r3 = "     productos p "
        r4 = "WHERE pc.codartprov='"+codartprov+"' "
        r5 = "      AND pc.codsussan=p.codsussan "
        sql = r1+r2+r3+r4+r5
        resultado = consultasBD.ordenCruda(sql)
        if len(resultado) != 0 or resultado != ():
            texto = "Ya existe ese codigo de producto\n"
            texto+= "para el proveedor especificado."
            utiles.mensaje(None,texto)
            return False
        return True

    def nuevoCodSussan(self):
        #busco el nuevo idsussan
        tablaSQL = "indices"
        camposSQL = "*"
        condicion = "1"
        resultado = consultasBD.executaSQL(self,camposSQL,tablaSQL,condicion)
        for r in resultado:
            nuevocodsussan = r[0]
        self.textCtrl5.SetLabel(str(nuevocodsussan))
        codsussan = int(self.textCtrl5.GetLabel())+1
        sql = "UPDATE indices SET ultimoidcod = %s" % str(codsussan)
        consultasBD.executa(None, sql)

    def OnKillFocus(self, event):
        self.textCtrl6.SetLabel((self.textCtrl6.GetLabel()).upper())

    def OnAlta(self, event):
        if not self.verificarDatos():
            return
        print "generando alta"
        temporada = self.comboBox4.GetLabel()
        if temporada[:5]=="INVIE": posicion = 0
        elif temporada[:5]=="VERAN": posicion = 1
        else: posicion = -1
        self.comboBox1.SetSelection(posicion)
        anio = temporada[-4:]
        for indice,x in enumerate(self.comboBox2.GetItems()):
            if x == anio: break
        self.comboBox2.SetSelection(indice)
        self.nuevoCodSussan()
        self.habilita2()

    def OnCalculaPrecioVenta(self, event):
        #actualiza automaticamente el precio de VENTA
        iva = Decimal("1.21").quantize(Decimal("0.10"))
        cien = Decimal("100.00").quantize(Decimal("0.10"))
        porigen = self.textCtrl7.GetLabel()
        pcosto = self.textCtrl8.GetLabel()
        parametro = self.textCtrl3.GetLabel()
        try:
            pcosto = Decimal(pcosto).quantize(Decimal("0.10"))
        except:
            pcosto = Decimal("0.00")
        try:
            parametro = Decimal(parametro).quantize(Decimal("0.10"))
        except:
            parametro = Decimal("0.00")
        #precio venta = precio costo + iva + parametro
        intermedio = (pcosto*iva).quantize(Decimal("0.10"))
        pventa = Decimal(str(round((intermedio*parametro/cien).quantize(Decimal("0.10"))+intermedio))).quantize(Decimal("0.10"))
        self.textCtrl9.SetLabel(str(pventa))

    def OnKillFocusCosto(self, event):
        self.textCtrl8.SetLabel(self.textCtrl7.GetLabel())
        self.OnKillFocus(None)
        self.textCtrl8.SetFocus()

    def verificarGuardar(self):
        if self.comboBox1.GetSelection()<0:
            utiles.mensaje(None,"Debe especificar Estacion")
            self.comboBox1.SetFocus()
            return False
        if self.comboBox2.GetSelection()<0:
            utiles.mensaje(None,"Debe especificar Anio")
            self.comboBox2.SetFocus()
            return False
        if self.textCtrl6.GetLabel()=="":
            utiles.mensaje(None,"Introduzca una Descripcion")
            self.textCtrl6.SetFocus()
            return False
        if self.comboBox3.GetSelection()<0:
            utiles.mensaje(None,"Debe especificar Grupo")
            self.comboBox3.SetFocus()
            return False
        try:
            cantidad = Decimal(self.textCtrl7.GetLabel())
        except:
            utiles.mensaje(None,"Debe especificar Precio Costo")
            self.textCtrl7.SetFocus()
            return False
        if cantidad<=Decimal("0.00"):
            utiles.mensaje(None,"Debe especificar Precio Costo mayor a 0")
            self.textCtrl7.SetFocus()
            return False
        try:
            cantidad = Decimal(self.textCtrl8.GetLabel())
        except:
            utiles.mensaje(None,"Debe especificar Precio Calculo")
            self.textCtrl8.SetFocus()
            return False
        if cantidad<=Decimal("0.00"):
            utiles.mensaje(None,"Debe especificar Precio Calculo mayor a 0")
            self.textCtrl8.SetFocus()
            return False
        try:
            cantidad = Decimal(self.textCtrl9.GetLabel())
        except:
            utiles.mensaje(None,"Debe calcularse precio de Venta")
            self.textCtrl9.SetFocus()
            return False
        if cantidad<=Decimal("0.00"):
            utiles.mensaje(None,"El precio de Venta debe ser superior a 0")
            self.textCtrl9.SetFocus()
            return False
        return True

    def OnGuardar(self, event):
        if not self.verificarGuardar():
            return
        try:
            consultasBD.begin()        
            codsussan = self.textCtrl5.GetLabel()
            idproveedor = self.textCtrl1.GetLabel()
            descri = self.textCtrl6.GetLabel()
            precioventa = self.textCtrl9.GetLabel()
            estacion = self.comboBox1.GetLabel()
            anio = self.comboBox2.GetLabel()
            nombregrupo,grupo = (self.comboBox3.GetLabel()).split(" / ")
            costounidad = self.textCtrl7.GetLabel()
            temporada = self.comboBox4.GetLabel()
            codartprov = self.textCtrl4.GetLabel()
            
            print "- actualizando productos"
            r1 = "INSERT INTO productos (codsussan,proveedor,descri,preciolt1,"
            r2 = "preciolt2,estacion,anio,grupo,preciocompra,temporada) VALUES "
            r3 = "('%s', '%s', '%s', "    % (codsussan,idproveedor,descri)
            r4 = "'%s','%s', '%s', '%s'," % (precioventa,precioventa,estacion,anio)
            r5 = "'%s', '%s', '%s')" % (grupo,costounidad,temporada)
            sql = r1+r2+r3+r4+r5
            sincronizar_tabla.addChange(sql=sql)
            consultasBD.executaSinCommit(None, sql)

            print "- actualizando producto_codartprov"
            r1 = "INSERT INTO producto_codartprov (codsussan,codartprov) "
            r2 = "VALUES ("
            r3 = "'%s', '%s')" % (codsussan,codartprov)
            sql = r1+r2+r3
            #sincronizar_tabla.addChange(sql=sql)
            consultasBD.executaSinCommit(None, sql)
            consultasBD.commit()
            sincronizar_tabla.syncServerTables(self, ["productos"])
        except:
            utiles.mensaje(None,"No se ha guardado el producto")
            return

        utiles.mensaje(None,"Se guardo el producto")
        self.OnLimpiar(None)
